/*
1 页面加载的时候
  1 从缓存中获取购物车数据 渲染到页面中
    这些数据  checked=true
2 微信支付
  1 哪些人 哪些帐号 可以实现微信支付
    1 企业帐号
    2 企业帐号的小程序后台中 必须 给开发者 添加上白名单
      1 一个 appid 可以同时绑定多个开发者
      2 这些开发者就可以公用这个appid 和 它的开发权限
3 支付按钮
  1 先判断缓存中有没有token
  2 没有 跳转到授权页面 进行获取token
  3 有token 。。。
  4 创建订单 获取订单编号
  5 已经完成了微信支付
  6 手动删除缓存中 已经被选中了的商品
  7 删除后的购物车数据 填充回缓存
  8 再跳转页面
 */

import {request} from "../../request/index";
import regeneratorRuntime from '../../lib/runtime/runtime';
import {requestPayment, showToast} from '../../utils/asyncWX';

Page({
        data: {
            address: {},
            cart: [],
            totalPrice: 0,
            totalNum: 0
        },

        onShow: function () {
            //获取收获地址信息
            const address = wx.getStorageSync('address') || {};
            this.setData({address});

            //获取缓存中的购物车数据
            let cart = wx.getStorageSync('cart') || [];
            cart = cart.filter(v => v.checked);

            //计算总数量和总价格
            const totalObj = {totalPrice: 0, totalNum: 0};
            cart.reduce((prev, cur) => {
                prev.totalNum += cur.num;
                prev.totalPrice += cur.num * cur.goods_price;
                return totalObj;
            }, totalObj);

            this.setData({address, cart, totalPrice: totalObj.totalPrice, totalNum: totalObj.totalNum});
        },

        //订单支付
        async handleOrderPay() {
            try {
                const token = wx.getStorageSync('token');
                if (!token) {
                    wx.navigateTo({
                        url: '/pages/auth/index'
                    })
                    return;
                }
                //创建订单
                // const header = {Authorization: token};
                const order_price = this.data.totalPrice;
                const consignee_addr = this.data.address.full;
                let goods = this.data.cart.map(v => ({
                    goods_id: v.goods_id,
                    goods_number: v.num,
                    goods_price: v.goods_price
                }));
                const orderParams = {order_price, consignee_addr, goods};
                // 准备发送请求 创建订单 获取订单编号
                const {order_number} = await request({url: "/my/orders/create", method: "POST", data: orderParams});
                // 发起 预支付接口
                const {pay} = await request({url: "/my/orders/req_unifiedorder", method: "POST", data: {order_number}});
                // 发起微信支付
                await requestPayment(pay);
                // 查询后台 订单状态
                const res = await request({url: "/my/orders/chkOrder", method: "POST", data: {order_number}});
                await showToast({title: "支付成功"});
                // 手动删除缓存中 已经支付了的商品
                let newCart = wx.getStorageSync("cart");
                newCart = newCart.filter(v => !v.checked);
                wx.setStorageSync("cart", newCart);
                // 支付成功了 跳转到订单页面
                wx.navigateTo({
                    url: '/pages/order/index'
                });
            } catch (err) {
                await showToast({title: "支付失败"})
                console.log(error);
            }
        }
    }
)
